package com.show.service.role;

import com.show.dao.role.RoleRepository;
import com.show.dto.sys_emp.SysEmpRole;
import com.show.dto.sys_role.SysRole;
import com.show.dto.sys_role.SysRoleMenu;
import com.show.dto.sys_role.Ztree;
import com.show.util.PageUtil;
import com.show.util.QueryUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.transaction.Transactional;
import java.util.Date;
import java.util.List;

/**
 * @author yxd
 * @Param
 * @date 2018-2-1
 */
@Service
@Transactional
public class RoleService {
    @Autowired
    private QueryUtil queryUtil;
    @Autowired
    private RoleRepository roleRepository;
    @Autowired
    private RoleMenuService roleMenuService;

    public List<SysRole> getReportedRole (){
        String sql = "SELECT * FROM `sys_role` where role_id = 17 or role_id = 18";
        return queryUtil.query(sql,SysRole.class);
    }

    /**
     * 查询所有角色信息(分页)
     * params 角色名称、角色编码、角色描述
     * @author yxd
     * @date 2018-02-1
     */
    public PageUtil<SysRole> findAllByPage(SysRole role, Integer page, Integer pageSize){

        StringBuffer sql = new StringBuffer();
        if (null == page || "".equals(page) || "0".equals(page)) {//排空，设置默认值
            page = 1;
        }
        if (null == pageSize || "".equals(pageSize) || "0".equals(pageSize)) {//排空，设置默认值
            pageSize = 10;
        }
        sql.append("select r.role_id,r.role_name,r.role_code,r.role_content,r.cdate from sys_role r where 1=1 ");

        //拼接条件
        if(StringUtils.isNotBlank(role.getRoleName())){
            sql.append(" and r.role_name like '%"+role.getRoleName()+"%' ");
        }
        if(StringUtils.isNotBlank(role.getRoleCode())){
            sql.append(" and r.role_code like '%"+role.getRoleCode()+"%' ");
        }
        if(StringUtils.isNotBlank(role.getRoleContent())){
            sql.append(" and r.role_content like '%"+role.getRoleContent()+"%' ");
        }
        sql.append(" and r.sts='1' ORDER BY cdate desc ");
        PageUtil<SysRole> roleMenus = queryUtil.queryByPage(sql.toString(), SysRole.class, page, pageSize);//分页查询
        System.out.println("查询所有角色（分页）="+sql.toString());
        return roleMenus;
    }

    /**
     * 查询所有角色信息
     * params
     * @author yxd
     * @date 2018-02-1
     */
    public List<SysRole> findAllRole(){
        StringBuffer sql = new StringBuffer();
        sql.append("select r.role_id,r.role_name,r.role_code,r.role_content,r.cdate from sys_role r where 1=1 ");
        sql.append(" and r.sts='1' ");
        List<SysRole> roleMenus = queryUtil.query(sql.toString(), SysRole.class);
        System.out.println("查询所有角色="+sql.toString());
        return roleMenus;
    }

    /**
     * 查询所有角色信息转换ztree格式
     *
     * @author yxd
     * @Param
     * @date 2018年1月30日
     */
    public List<Ztree> findParentToChirld() {
        String sql = "SELECT role_id as id,'' as pId,role_name as name FROM sys_role where sts='1' ";
        List<Ztree> ztrees = queryUtil.query(sql, Ztree.class);
        for (Ztree z : ztrees) {
            if (z.getpId() == null || z.getpId().equals("")) {
                z.setpId("0");
            }
        }
        return ztrees;
    }

    /**
     * 新增角色信息
     * params 角色名称、角色编码、角色描述
     * @author yxd
     * @date 2018-02-1
     */
    public void save(SysRole role){
        Date curDate = new Date(System.currentTimeMillis());//获取当前时间
        role.setCdate(curDate);
        role.setSts("1");
        roleRepository.saveAndFlush(role);
    }

    /**
     * 修改校验角色信息
     * params 角色名称、角色编码
     * @author yxd
     * @date 2018-02-1
     */
    public String checkRoleUpdate(SysRole role){
        String result="";
        String roleCodeNum=roleRepository.checkRoleCode(role.getRoleCode(),role.getRoleId());//校验角色编码
        String roleNameNum=roleRepository.checkRoleName(role.getRoleName(),role.getRoleId());//校验角色名称
        if(Integer.parseInt(roleCodeNum)>0){
            result="roleCode";
        }
        if(Integer.parseInt(roleNameNum)>0){
            result="roleName";
        }
        return result;
    }

    /**
     * 修改校验角色信息
     * params 角色名称、角色编码
     * @author yxd
     * @date 2018-02-1
     */
    public String checkRoleUpdate1(SysRole role){
        String result="";
        String nameSql = "select * from sys_role where sts=1 and role_name= '"+role.getRoleName()+"'";
        String codeSql = "select * from sys_role where sts=1 and role_code= '"+role.getRoleCode()+"'";
        if(queryUtil.query(nameSql,SysRole.class).size()>0){
            SysRole sysRole1=queryUtil.query(nameSql,SysRole.class).get(0);
            if(sysRole1.getRoleId()!=role.getRoleId()){
                result="roleName";
            }
        }
        if(queryUtil.query(nameSql,SysRole.class).size()>0){
            SysRole sysRole1=queryUtil.query(codeSql,SysRole.class).get(0);
            if(sysRole1.getRoleId()!=role.getRoleId()){
                result="roleCode";
            }
        }

//        String roleCodeNum=roleRepository.checkRoleCode(role.getRoleCode(),role.getRoleId());//校验角色编码
//        String roleNameNum=roleRepository.checkRoleName(role.getRoleName(),role.getRoleId());//校验角色名称
//        if(Integer.parseInt(roleCodeNum)>0){
//            result="roleCode";
//        }
//        if(Integer.parseInt(roleNameNum)>0){
//            result="roleName";
//        }
        return result;
    }

    /**
     * 角色信息ById
     * params 角色ID
     * @author yxd
     * @date 2018-02-1
     */
    public SysRole findOne(int roleId){
        return roleRepository.findOne(roleId);
    }


    /**
     * 修改角色信息
     * params 角色名称、角色编码、角色描述
     * @author yxd
     * @date 2018-02-1
     */
    public void updateAndSave(SysRole role){
        Date curDate = new Date(System.currentTimeMillis());//获取当前时间
        role.setCdate(curDate);
        role.setSts("1");
        roleRepository.saveAndFlush(role);
    }

    /**
     * 删除角色信息(逻辑删除)
     * params 角色ID
     * @author yxd
     * @date 2018-02-1
     */
    public String deleteRole(int roleId){
        try {
            roleRepository.deleteRole(roleId);
        }catch (Exception e){
            return "1";
        }
        return "0";
    }

    /**
     * 添加角色对应菜单
     *
     * @param
     * @author yxd
     * @date 2018/02/1
     */
    public String insertMenu(SysRole role) {
        String []menuId=role.getMenuId().split(",");
        SysRole sysRole=roleRepository.findOne(role.getRoleId());
        try {
            roleMenuService.delete(role.getRoleId());
            for (int i=0;i<menuId.length;i++){
                sysRole.addSysMenu(new SysRoleMenu(menuId[i]));
            }

            roleRepository.saveAndFlush(sysRole);
        }catch (Exception e){
            return "0";
        }
        return "1";
    }

    /**
     * 查询role_emp中间表，根据empid查询roleid
     *
     * @author 姜文
     * @Param
     * @date 2018年4月2日, AM 09:22:59
     */
    public List<SysEmpRole> findEmpRoleByEmpId(String empId){
        String sql = "SELECT * FROM `sys_emp_role` WHERE emp_id = '"+empId+"'";
        return queryUtil.query(sql, SysEmpRole.class);
    }
}
